name: Deploy

on:
  push:
    branches:
      - master
      - beta
    tags:
      - rust-1.**

env:
  TARGET_BRANCH: 'gh-pages'
  SHA: '${{ github.sha }}'
  SSH_REPO: 'git@github.com:${{ github.repository }}.git'

jobs:
  deploy:
    runs-on: ubuntu-latest
    if: github.repository == 'rust-lang/rust-clippy'

    steps:
    # Setup
    - name: Checkout
      uses: actions/checkout@v3

    - name: Checkout
      uses: actions/checkout@v3
      with:
        ref: ${{ env.TARGET_BRANCH }}
        path: 'out'

    # Run
    - name: Set tag name
      if: startswith(github.ref, 'refs/tags/')
      run: |
        TAG=$(basename ${{ github.ref }})
        echo "TAG_NAME=$TAG" >> $GITHUB_ENV
    - name: Set beta to true
      if: github.ref == 'refs/heads/beta'
      run: echo "BETA=true" >> $GITHUB_ENV

    # We need to check out all files that (transitively) depend on the
    # structure of the gh-pages branch, so that we're able to change that
    # structure without breaking the deployment.
    - name: Use deploy files from master branch
      run: |
        git fetch --no-tags --prune --depth=1 origin master
        git checkout origin/master -- .github/deploy.sh util/versions.py util/gh-pages/versions.html

    # Generate lockfile for caching to avoid build problems with cached deps
    - name: cargo generate-lockfile
      run: cargo generate-lockfile

    - name: Cache
      uses: Swatinem/rust-cache@v1.3.0

    - name: cargo collect-metadata
      run: cargo collect-metadata

    - name: Deploy
      run: |
        eval "$(ssh-agent -s)"
        ssh-add - <<< "${{ secrets.DEPLOY_KEY }}"
        bash .github/deploy.sh
